#include <bits/stdc++.h>
using namespace std;

const int N = 2e5+5;
typedef long long LL;

set<int> S[N];

// int n, k;

LL n, k;

int main(int argc, char const *argv[])
{
    // for (int i=1; i<=100; ++i) {
    //     for (int j=i; j; j= (j&1) ? j-1:j/2) {
    //         S[i].insert(j);
    //     }
    // }

    // for (int k=1; k<=20; ++k) {
    //     printf("k=%3d: ", k);
    //     for (int n=k; n<=70; ++n) {
    //         int cnt[100];
    //         memset(cnt, 0, sizeof cnt);
    //         for (int i=1; i<=n; ++i) {
    //             for (int j : S[i]) cnt[j]++;
    //         }
    //         bool suc = false;
    //         for (int j=n; j>=1; --j) {
    //             if (cnt[j] >= k) {
    //                 suc = true;
    //                 printf("%3d ", j);
    //                 break;
    //             }
    //         }
    //         if (!suc) printf(" -1 ");
    //     }
    //     puts("");
    // }

    cin >> n >> k;
    if (n == 1) printf("%d\n", 1);
    else if (k == 1) {
        printf("%lld\n", n);
    } else if (n == k) puts("1");
     else {
        LL nn = 1;
        while ((nn<<1) <= k) nn <<= 1;
        LL pos = ((n - k - 1) / nn + 1) * 2;
        if (k == nn * 2 - 1) {
            nn <<= 1;
            pos = ((n - k - 1) / nn + 1) * 2;
            if ((n-k-1) % nn == nn-1) ++pos;
        }
        printf("%lld\n", pos);
        // printf("n=%lld, k=%lld, nn=%lld\n", n, k, nn);
    }

    return 0;
}
